//package kt.flows
//
//import kotlinx.coroutines.*
//import kotlin.system.measureTimeMillis
//
///**
// * 3
// *  这里主要是对 async 的使用，和 async 懒加载
// *  1，async需要和await配合使用
// *
// *  2，async的懒加载
// *
// *  3，异常处理
// *  @sample asyncFailSumDemo
// *
// */
//fun main() {
////    asyncSimpleShow()
////    asyncLazyShow()
////    asyncSumDemo()
//    asyncFailSumDemo()
//
//
//}
//
//
//
//
//
//fun asyncFailSumDemo(){
//    runBlocking {
//        try {
//            failedConcurrentSum()
//        } catch(e: ArithmeticException) {
//            println("Computation failed with ArithmeticException")
//        }
//    }
//
//    /*
//            Second child throws an exception
//            First child was cancelled
//            Computation failed with ArithmeticException
//     */
//
//}
//
//
//fun asyncSumDemo(){
//    runBlocking {
//        val time = measureTimeMillis {
//            println("The answer is ${concurrentSum()}")
//        }
//        println("Completed in $time ms")
//    }
//
//    /*
//            do some one
//            do some two...
//            The answer is 42
//            Completed in 1026 ms
//     */
//
//}
//
//
//
//suspend fun doSomethingUsefulOne(): Int {
//    delay(1000L) // 假设我们在这里做了些有用的事
//    println("do some one ")
//    return 13
//}
//
//suspend fun doSomethingUsefulTwo(): Int {
//    delay(1000L) // 假设我们在这里也做了些有用的事
//    println("do some two... ")
//    return 29
//}
//
//suspend fun concurrentSum(): Int = coroutineScope {
//    val one = async { doSomethingUsefulOne() }
//    val two = async { doSomethingUsefulTwo() }
//    one.await() + two.await()
//}
//
//suspend fun failedConcurrentSum(): Int = coroutineScope {
//    val one = async<Int> {
//        try {
//            delay(Long.MAX_VALUE) // 模拟一个长时间的运算
//            42
//        } finally {
//            println("First child was cancelled")
//        }
//    }
//    val two = async<Int> {
//        println("Second child throws an exception")
//        throw ArithmeticException()
//    }
//    // 当two发生 exception 时，one会执行 finally，one的delay被取消
//    one.await() + two.await()
//}
//
//
//
//fun asyncLazyShow(){
//    runBlocking {
//        var time = measureTimeMillis{
//            var one = async(start = CoroutineStart.LAZY){
//                doSomethingUsefulOne()
//            }
//            var two = async(start = CoroutineStart.LAZY){
//                doSomethingUsefulTwo()
//            }
//
//            println("the answer is one = ${one.await()} ; two = ${two.await()}")
//        }
//        println("user time = $time")
//
//    }
//
//}
//
//
//
//fun asyncSimpleShow(){
//    runBlocking {
//        var time = measureTimeMillis{
//            var one = async{
//                doSomethingUsefulOne()
//            }
//            var two = async{
//                doSomethingUsefulTwo()
//            }
//
//            println("asyn simple .. one = ${one.await()} ; two = ${two.await()}")
//        }
//        println("user time = $time  ms")
//
//    }
////    do some one
////do some two...
////asyn simple .. one = 13 ; two = 29
////user time = 1015  ms
//
//}
//
//
